package com.ruoyi.project.third.virtually.controller;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.third.virtually.dto.SecretAsrReportDto;
import com.ruoyi.project.third.virtually.dto.SecretPickUpReportDto;
import com.ruoyi.project.third.virtually.dto.SecretRecordingDto;
import com.ruoyi.project.third.virtually.dto.SecretReportDto;
import com.ruoyi.project.third.virtually.dto.SecretRingReportDto;
import com.ruoyi.project.third.virtually.dto.SecretStartReportDto;
import com.ruoyi.project.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;


/**
 * @author 挺好的 2023年11月22日 下午 16:17
 */
@Slf4j
@Controller
@RequestMapping ("/nt/virtually/callback")
public class VirtuallyCallbackController extends BaseController {

    @Autowired
    RedisUtils redisUtils;


    /**
     * 通过HTTP批量推送方式订阅呼叫发起时话单报告消息（SecretStartReport），可以在呼叫发起时立即获取到通话记录信息，包括通话开始时间、主被叫号码等，便于平台进行预判处理。
     */
    @PostMapping ("/pushSecretStartReport")
    @ResponseBody
    public AjaxResult pushSecretStartReport(@RequestBody List<SecretStartReportDto> dtoList)
    {
        System.out.println("pushSecretStartReport:"+JSONObject.toJSONString(dtoList));
        if(ObjectUtil.isEmpty(dtoList)){
            return AjaxResult.error("无数据");
        }
        dtoList.forEach(dto->{
            redisUtils.set("user:order:task:startReport:"+ dto.getPhone_no()+"_"+dto.getPeer_no(),
                    "pushSecretStartReport",15*60);
        });
        return AjaxResult.success("接收成功");
    }

    /**
     * 通过HTTP批量推送方式订阅呼叫结束后话单报告消息（SecretReport），可以在呼叫结束后获取通话记录信息，包括通话开始时间、通话结束时间、主被叫号码等，便于平台进行管理。
     */
    @PostMapping ("/pushSecretReport")
    @ResponseBody
    public AjaxResult pushSecretReport(@RequestBody List<SecretReportDto> dtoList)
    {
        System.out.println(JSONObject.toJSONString(dtoList));
        if(ObjectUtil.isEmpty(dtoList)){
            return AjaxResult.error("无数据");
        }
        dtoList.forEach(dto->{

            long dayPoorSecond = DateUtils.getDayPoorSecond(
                    DateUtils.parseDate(dto.getRelease_time(), DateUtils.YYYY_MM_DD_HH_MM_SS),
                    DateUtils.parseDate(dto.getStart_time(), DateUtils.YYYY_MM_DD_HH_MM_SS)
            );

            redisUtils.set("user:order:task:secretReport:"+ dto.getPhone_no()+"_"+dto.getPeer_no(),dayPoorSecond
                    ,15*60);
        });
        return AjaxResult.success("接收成功");
    }

    /**
     * 通过HTTP批量推送方式订阅录音状态报告消息（SecretRecording），可以在通话结束后获取通话的录音记录。
     */
    @PostMapping ("/pushSecretRecording")
    @ResponseBody
    public AjaxResult pushSecretRecording(@RequestBody List<SecretRecordingDto> dtoList)
    {
        System.out.println(JSONObject.toJSONString(dtoList));
        return AjaxResult.success("接收成功");
    }

    /**
     * 通过HTTP批量推送方式订阅录音ASR状态报告消息（SecretAsrReport），可以获取通话中的实时文本转换结果。
     */
    @PostMapping ("/pushSecretAsrReport")
    @ResponseBody
    public AjaxResult pushSecretAsrReport(@RequestBody List<SecretAsrReportDto> dtoList)
    {
        System.out.println(JSONObject.toJSONString(dtoList));
        return AjaxResult.success("接收成功");
    }
    /**
     * 通过HTTP批量推送方式订阅中间状态响铃事件消息（SecretRingReport），获取呼叫过程中的响铃信息。
     */
    @PostMapping ("/pushSecretRingReport")
    @ResponseBody
    public AjaxResult pushSecretRingReport(@RequestBody List<SecretRingReportDto> dtoList)
    {
        System.out.println(JSONObject.toJSONString(dtoList));
        return AjaxResult.success("接收成功");
    }
    /**
     * 通过HTTP批量推送方式订阅中间状态摘机（被叫接通）事件消息（SecretPickUpReport），获取呼叫过程中的摘机信息。
     */
    @PostMapping ("/pushSecretPickUpReport")
    @ResponseBody
    public AjaxResult pushSecretPickUpReport(@RequestBody List<SecretPickUpReportDto> dtoList)
    {
        System.out.println(JSONObject.toJSONString(dtoList));
        if(ObjectUtil.isEmpty(dtoList)){
            return AjaxResult.error("无数据");
        }
        dtoList.forEach(dto->{
            redisUtils.set("user:order:task:secretPickUpReport"+ dto.getPhone_no()+"_"+dto.getPeer_no(),
                    "pushSecretPickUpReport",15*60);
        });
        return AjaxResult.success("接收成功");
    }
}
